package com.qifan.energy.base;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;

import com.gyf.immersionbar.BarHide;
import com.qifan.energy.R;
import com.gyf.immersionbar.ImmersionBar;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * @author : FangShiKang
 * @date : 2020/04/11.
 * email : fangshikang@outlook.com
 * desc :   fragment 基类抽取
 */
public abstract class BaseFragment extends Fragment {

    private Unbinder mUnbinder;
    protected ImmersionBar immersionBar;//暴露出来供给单个界面更改样式

    /*private IPresenterImplement mIPresenterImplement;*/

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View mRootView = inflater.inflate(getLayoutId(), container, false);
        /*View view = View.inflate(getContext(), getLayoutId(), null);*/
        mUnbinder = ButterKnife.bind(this,mRootView);
        initView(mRootView);
        initData();
        /*initImmersionBar();*/
        /*mIPresenterImplement = new IPresenterImplement(this);*/
        return mRootView;
    }

    /*
     * 默认样式(红底白字)
     * */
    private void initImmersionBar() {
        immersionBar = ImmersionBar.with(this)
                //状态栏颜色，不写默认透明色
                .statusBarColor(R.color.white)
                .fitsSystemWindows(true)
                /**
                 * 原理：如果当前设备支持状态栏字体变色，会设置状态栏字体为黑色，
                 * 如果当前设备不支持状态栏字体变色，会使当前状态栏加上透明度，否则不执行透明度
                 */
                .statusBarDarkFont(true)
                //自动状态栏字体和导航栏图标变色，必须指定状态栏颜色和导航栏颜色才可以自动变色哦
                .autoDarkModeEnable(true)
                //自动状态栏字体变色，必须指定状态栏颜色才可以自动变色哦
                .autoStatusBarDarkModeEnable(true, 0.2f)
                //自动导航栏图标变色，必须指定导航栏颜色才可以自动变色哦
                .autoNavigationBarDarkModeEnable(true, 0.2f)
                //状态栏变色后的颜色
                .statusBarColorTransform(R.color.system_color)
                //导航栏变色后的颜色
                //                .navigationBarColorTransform(R.color.system_color)
                //状态栏和导航栏变色后的颜色
                .barColorTransform(R.color.system_color)
                //解决软键盘与底部输入框冲突问题，默认为false，还有一个重载方法，可以指定软键盘mode
                .keyboardEnable(true);
        // 导航栏颜色
        //                .navigationBarColor(R.color.system_color)

        immersionBar.init();
    }

    /**
     * 状态栏白底黑字
     */
    public void changeStatusWhiteFontBlack() {
        if (immersionBar != null){
            immersionBar
                    .statusBarColor(R.color.white)
                    .keyboardEnable(true)
                    .keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
                    .statusBarDarkFont(true, 0.2f)
                    .init();
        }
    }

    /**
     * 状态栏透明底黑字
     */
    @SuppressWarnings("unused")
    public void changeStatusTransparentFontBlack() {
        if (immersionBar != null){
            immersionBar
                    .transparentStatusBar()
                    .keyboardEnable(true)
                    .keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
                    .statusBarDarkFont(true, 0.2f)
                    .init();
        }
    }

    /**
     * 状态栏透明底白字
     */
    public void changeStatusTransparentFontWhite() {
        if (immersionBar != null){
            immersionBar
                    .transparentStatusBar()
                    .fitsSystemWindows(false)
                    .statusBarDarkFont(false)
                    .keyboardEnable(true)
                    .keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
                    .init();
        }
    }

    /**
     * 设置页面全屏
     */
    public void hideStatusAndResetFullScreen(){
        immersionBar.with(this)
                .reset()
                .titleBar(null, false)
                .transparentBar()
                .fullScreen(true)
                .hideBar(BarHide.FLAG_HIDE_BAR)  //隐藏状态栏或导航栏或两者，不写默认不隐藏
                .init();
    }

    //子Fragment实现的获取Layout
    public abstract int getLayoutId();

    //初始化控件
    protected abstract void initView(View view);

    //实现方法,初始化数据
    public abstract void initData();

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if (mUnbinder != null){
            mUnbinder.unbind();
            mUnbinder = null;
        }
    }
}
